【Docker】コンテナを更新して直接イメージを作成するDocker Commitを紹介
今回のテーマ
明けましておめでとうございます、AWS事業本部コンサルティング部のこーへいです。
今回のテーマは「コンテナから直接イメージを作成するDocker Commitコマンドの紹介」です。
背景
Dockerイメージの作成方法はDockerfileを用意してビルドすることが一般的ですが、イメージから立ち上げたコンテナを直接編集してコンテナからイメージを作成する方法があることを知り、今回メモとして記事にまとめることにしました。
結論
$ docker commit {対象のコンテナID(コンテナ名)} {作成したいイメージ名}
イメージからコンテナを立ち上げて、上記コマンドを実行することでコンテナからイメージを作成することができます。
実際の流れを紹介
ローカルにイメージを用意する
今回自分はDocker Hubにて公開されているhttpdのDockerイメージを利用しました。
$ docker image pull httpd
上記コマンドを実行し、ローカルにDockerイメージを落とします。
コンテナを起動する
続けて、下記コマンドを実行しhttpdイメージからコンテナを起動します。
$ docker container run -d -p 8080:80 httpd
上記コマンド実行後に、http://localhost:8080にアクセスすると以下画面が表示されます。
今回はこのindex.htmlを更新します。
コンテナを更新する
下記コマンドを実行してコンテナIDを確認し、コンテナにログインしてみます。
$ docker container ps $ docker container exec -it {対象のコンテナID} bash
以下のコマンドはコンテナ環境で実行し、index.htmlファイルを確認します。
※コンテナ内にて実行 $ cd htdocs $ cat index.html <h1>It works!</h1> $ vi index.html bash: vi: command not found
index.htmlファイルを修正したいですが、vimがインストールされていないため下記でインストールしましょう。
※コンテナ内にて実行 $ apt-get update $ apt-get install vim -y
改めてindex.htmlファイルを修正し、exitでコンテナからログアウトします。
※コンテナ内にて実行 $ vi index.html $ cat index.html <h1>It works! v1</h1> $ exit
再びhttp://localhost:8080にアクセスすると以下の画面が表示されます。
※画面表示が変わらない場合はcmd(ctrl)+shift+rで更新すると変わると思います
上記を確認できたら、一旦コンテナを停止しましょう。
$ docker stop {対象のコンテナID}
コンテナからイメージを作成する
$ docker commit {対象のコンテナID} httpd:v1 $ docker images $ docker container run -d -p 8080:80 httpd:v1
それではコンテナで直接index.htmlファイルを修正したので、この修正分を反映したイメージを作成してみましょう。
commitコマンドを実行し、イメージ一覧を表示すると新しくイメージが追加されているのが確認できます。
その後、実際にこのイメージが修正を反映できているか確かめるためコンテナを起動します。
三度http://localhost:8080にアクセスすると以下の画面が表示されます。
無事成功しました!
結果
Docker Commitを使用すれば簡単にコンテナからイメージを作成できますね。
今までDockerfileからしかイメージの作成方法を知らなかった方は、知っておくとどこかで役に立つかもしれません。